import TIM from '@tencentcloud/chat';
import TIMUploadPlugin from 'tim-upload-plugin';
import {
	genTestUserSig
} from '@/chat/base/genTestUserSig.js'; // 引入自定义UserSig生成工具

// 常量定义
const SDKAppID = 1600075912;
// 测试环境使用的密钥，生产环境请移除
const SECRET_KEY = 'ad9a632e5240b38caa624bf3a6b39e63b8dba085d0692c95904662bb5f247ee1'; // 从腾讯云控制台获取的密钥
class TIMManager {
	constructor() {
		uni.$TUIKit = null;
		this.isInitialized = false;
		this.isLogin = false;
	}
	
	/**
	 * 初始化IM实例
	 */
	init() {
		uni.setStorageSync('login',this.isLogin)
		if (this.isInitialized) {
			console.log('IM实例已初始化');
			return Promise.resolve();
		}
		console.log('创建IM实例');
		// 创建或获取IM实例
		uni.$TUIKit = TIM.create({
			SDKAppID
		});
		uni.$TUIKit.setLogLevel(1); // 普通级别日志
		uni.$TUIKit.registerPlugin({
			'tim-upload-plugin': TIMUploadPlugin
		});
		// 保存TIM相关常量到全局
		uni.$TUIKitTIM = TIM;
		uni.$TUIKitEvent = TIM.EVENT;
		uni.$TUIKitVersion = TIM.VERSION;
		uni.$TUIKitTypes = TIM.TYPES;
		// 注册事件监听
		this.isInitialized = true;
		// 初始化后执行登录
		if(this.isLogin){
			uni.switchTab({
				url:'/pages/index/index'
			})
		}else{
			uni.reLaunch({
				url:'/pages/loging/loging'
			})
		}
		// return this.login('wx_2');
	}


	/**
	 * 自定义生成UserSig（测试环境用）
	 * @param {string} userId - 用户ID
	 * @returns {string} UserSig签名
	 */
	generateUserSig(userId) {
		if (!userId) {
			throw new Error('用户ID不能为空');
		}

		if (!SECRET_KEY) {
			throw new Error('请配置SECRET_KEY（仅用于测试环境）');
		}

		// 使用自定义工具生成UserSig
		const {
			userSig
		} = genTestUserSig({
			SDKAppID: SDKAppID,
			secretKey: SECRET_KEY,
			userID: userId,
			expireTime: 604800 // 有效期7天
		});

		return userSig;
	}

	/**
	 * 登录IM
	 */
	login(userID) {
		return new Promise((resolve, reject) => {
			try {
				// 生成UserSig
				const userSig = this.generateUserSig(userID);
				uni.$TUIKit.login({
					userID: userID,
					userSig: userSig
				}).then(imResponse => {
					this.isLogin = true; 
					console.log('IM登录成功', imResponse);
					uni.setStorageSync('login',this.isLogin)
					uni.setStorageSync('userID',userID)
					resolve(imResponse);
				}).catch(err => {
					this.isLogin = false;
					uni.setStorageSync('login',this.isLogin)
					console.error('IM登录失败', err);
					reject(err);
				});
			} catch (error) {
				console.error('生成UserSig失败', error);
				reject(error);
			}
		});
	}
	/**
	 * 登出IM
	 */
	logout() {
		return new Promise((resolve, reject) => {
			if (!uni.$TUIKit) {
				return resolve();
			}
			uni.$TUIKit.logout().then(imResponse => {
				this.isLogin = false;
				console.log('IM登出成功', imResponse);
				resolve(imResponse);
			}).catch(err => {
				console.error('IM登出失败', err);
				reject(err);
			});
		});
	}

	/**
	 * 销毁IM实例
	 */
	destroy() {
		console.log('销毁IM实例');
		if (uni.$TUIKit) {
			this.logout().finally(() => {
				uni.$TUIKit.destroy();
				uni.$TUIKit = null;
			});
		}
		this.isInitialized = false;
		this.isLogin = false;
	}

	/**
	 * 获取IM实例
	 */
	getInstance() {
		return uni.$TUIKit;
	}

	/**
	 * 检查是否已登录
	 */
	isLoggedIn() {
		return this.isLogin;
	}

	/**
	 * 检查是否已初始化
	 */
	isInitialized() {
		return this.isInitialized;
	}
}

// 导出单例实例
export default new TIMManager();